package leetcode;

import java.util.HashSet;
import java.util.Scanner;

public class code3 {

    /**
     * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长 子串 的长度。
     *
     *
     *
     * 示例 1:
     *
     * 输入: s = "abcabcbb"
     * 输出: 3
     * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
     * 示例 2:
     *
     * 输入: s = "bbbbb"
     * 输出: 1
     * 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
     * 示例 3:
     *
     * 输入: s = "pwwkew"
     * 输出: 3
     * 解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
     *      请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
     * @param args
     *
     *
     * 1231231
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String s  = scanner.next();

        System.out.println(lengthOfLongestSubstring(s));
    }

    public static int lengthOfLongestSubstring(String s) {

        //创建滑动窗口，hashset 判断无重复字符的最长子串
        HashSet<Character> characters = new HashSet<>();
        int left = 0, right = 0;
        int res = 0;
        while (right < s.length()) {
            char c = s.charAt(right);
            if (!characters.contains(c)){
                characters.add(c);
                right++;
            }
            else {
                characters.remove(s.charAt(left));
                left++;
            }
            res = Math.max(res, right - left);
        }

        return res;
    }
}
